#ifndef WORKTHREAD_H
#define WORKTHREAD_H
#include <QDebug>
#include <QTcpSocket>
#include <QThread>

// 1 继承自QThread
class WorkThread : public QThread {
  Q_OBJECT
public:
  WorkThread(qintptr socketDescriptor);

  /**
   * @brief 结束线程
   */
  void stopThread();

  /**
   * @brief 发送数据
   * @param arr
   */
  void send(const QByteArray &arr);

public slots:
  void onDisconnected();
  void onReadyRead();

signals:
  // 因为子线程不能更新界面，利用该信号将信息传递到主线程进行显示。
  void showMessage(const QString &info, bool conn = true);
  // 这个信号是发给 TcpSocket，触发发送消息行为
  void onSend(const QByteArray &arr);

  void onThreadStoped(WorkThread *th);

protected:
  // 2 重写 run
  virtual void run() override;

private:
  // 只能定义指针，在子线程中创建QTcpSocket 对象,不然在子线程中收发消息会出错。
  QTcpSocket *m_tcpClient;
  // QTcpSocket  m_tcpClient; //不能这样在主线程中创建对象。

  // 套接字描述符（传统的网络编程 socket()函数返回的值）
  qintptr m_socket;
};

#endif // RECVTHREAD_H
